package com.pet_service.exception;

import com.pet_service.result.Result;
import com.pet_service.result.ResultCodeEnum;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Hidden //当 @Hidden 注解放在类上时，整个类及其所有公共方法都不会出现在 API 文档中
@RestControllerAdvice // 表示这个类是异常处理类
@Slf4j
public class GlobalExceptionHandler {
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex){
        // 处理系统异常
        ex.printStackTrace(); //在控制台打印异常信息
        return Result.fail(ex.getCode(),ex.getMessage());
    }

    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex) {
        // 处理业务异常
        ex.printStackTrace(); //在控制台打印异常信息
        return Result.fail(ex.getCode(), ex.getMessage());
    }


    //除了自定义的异常处理器，保留对Exception类型的异常处理，用于处理非预期的异常
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex){
        // 处理其他异常
        ex.printStackTrace(); //在控制台打印异常信息
        return Result.fail(ResultCodeEnum.FAIL.getCode(),
                ResultCodeEnum.FAIL.getMessage()+":"+ex.getMessage());
    }
}
